package br.com.unip.menudroidweb.facade;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import br.com.unip.menudroidweb.dao.ProdutoDAO;
import br.com.unip.menudroidweb.model.Produto;

import com.google.gson.Gson;

@Path("/produto")
public class ProdutoFacade implements Serializable {
	private static final long serialVersionUID = 7626044516417662074L;
	private ProdutoDAO produtoDAO = new ProdutoDAO();
	
	public void createProduto(Produto produto) {
		produtoDAO.beginTransaction();
		produtoDAO.save(produto);
		produtoDAO.commitAndCloseTransaction();
	}

	public void updateProduto(Produto produto) {
		produtoDAO.beginTransaction();
		Produto persistedProduto = produtoDAO.find(produto.getIdProduto());
		persistedProduto.setDescricao(produto.getDescricao());
		persistedProduto.setGrupoProduto(produto.getGrupoProduto());
		persistedProduto.setObservacaoCardapio(produto.getObservacaoCardapio());
		persistedProduto.setPrecoCusto(produto.getPrecoCusto());
		persistedProduto.setPrecoVenda(produto.getPrecoVenda());
		produtoDAO.update(persistedProduto);
		produtoDAO.commitAndCloseTransaction();
	}

	public Produto findProduto(int produtoId) {
		produtoDAO.beginTransaction();
		Produto produto = produtoDAO.find(produtoId);
		produtoDAO.closeTransaction();
		return produto;
	}

	public List<Produto> listAll() {
		produtoDAO.beginTransaction();
		List<Produto> produto = produtoDAO.findAll();
		produtoDAO.closeTransaction();
		return produto;
	}

	public void deleteProduto(Produto produto) {
		produtoDAO.beginTransaction();
		Produto persistedProduto = produtoDAO.findReferenceOnly(produto.getIdProduto());
		produtoDAO.delete(persistedProduto);
		produtoDAO.commitAndCloseTransaction();
	}
	
//	Metodos WS Android
	
	@GET
	@Path("/listar")
	@Produces("application/json")
	public String listarTodosAndroid() {
		produtoDAO.beginTransaction();
		ArrayList<Produto> produto = (ArrayList<Produto>) produtoDAO.findAll();
		produtoDAO.closeTransaction();
		return new Gson().toJson(produto);
	}
	
	@GET
	@Path("/listar/{id}")
	@Produces("application/json")
	public String findProdutoAndroid(@PathParam("id") int produtoId) {
		produtoDAO.beginTransaction();
		Produto produto = produtoDAO.find(produtoId);
		produtoDAO.closeTransaction();
		return new Gson().toJson(produto);
	}

	@GET
	@Path("/listargrupo/{id}")
	@Produces("application/json")
	public String listarPorGrupoProduto(@PathParam("id") int grupoProdutoId){
		produtoDAO.beginTransaction();
		ArrayList<Produto> produto = (ArrayList<Produto>) produtoDAO.findProdutoByGrupoProduto(grupoProdutoId);
		produtoDAO.closeTransaction();
		return new Gson().toJson(produto);
	}

}
